繼續深耕tf的部分,我們已經知道tf就是用來監聽不同座標系統frame之間的關聯的一個樹狀結構,這個樹可以隨著時間改變(default是10秒一次),因此我們可以透過lookupTransform()
來查看最新的tf資訊,也可以用同一個API查看指定時間的tf資訊:
listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
其中第三個參數ros::Time(0)
就是可以指定特定時間的tf,time=0表示最新一筆收到的tf資訊,也可以使用ros::Time::now()
來獲得當前時間的tf資訊:
listener.lookupTransform("/turtle2", "/turtle1", ros::Time::now(), transform);
除了lookupTransform()
以外,還有一個可以用的API就是waitForTransform()
,他會block住直到收掉兩個frame的資料以後才做處理,並且可以設定timeout,超時就不採用這樣。
ros::Time now = ros::Time::now();
listener.waitForTransform("/turtle2", "/turtle1", now, ros::Duration(3.0));
listener.lookupTransform("/turtle2", "/turtle1", now, transform);
前兩個參數就是要監聽的frame,第三個參數表示當前時間,第四個就是timeout設定的時間囉!
筆者今天出差回來太累啦~~~本來要連time travel都一起講的,但是時間真的不夠用QQ
http://wiki.ros.org/tf/Tutorials/tf%20and%20Time%20%28C%2B%2B%29
http://wiki.ros.org/tf/Tutorials/Time%20travel%20with%20tf%20%28C%2B%2B%29